// package com.example.redis.config.redisson;
//
// import cn.hutool.core.util.StrUtil;
// import lombok.extern.slf4j.Slf4j;
// import org.redisson.Redisson;
// import org.redisson.api.RedissonClient;
// import org.redisson.config.Config;
// import org.redisson.config.SentinelServersConfig;
// import org.redisson.config.SingleServerConfig;
// import org.springframework.beans.factory.annotation.Autowired;
// import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty;
// import org.springframework.boot.context.properties.EnableConfigurationProperties;
// import org.springframework.context.annotation.Bean;
// import org.springframework.context.annotation.Configuration;
//
// import java.io.IOException;
//
//
// /**
//  * redisson的配置
//  */
// @Configuration
// @EnableConfigurationProperties(RedissonProperties.class)
// @Slf4j
// public class RedissonConfig {
//
//     @Autowired
//     private RedissonProperties redssionProperties;
//
//
//     /**
//      * RedissonClient,单机模式
//      *
//      * @return
//      * @throws IOException
//      */
//     @Bean
//     @ConditionalOnProperty(name = "spring.redis.host")
//     public RedissonClient redissonSingle() {
//         String host = redssionProperties.getHost();
//         RedissonClient redissonClient = null;
//
//         if (StrUtil.isNotBlank(host)) {
//             //此为单机模式
//             Config config = new Config();
//             SingleServerConfig singleServerConfig = config.useSingleServer();
//             singleServerConfig
//                     .setAddress("redis://" + host + ":" + redssionProperties.getPort());
//             singleServerConfig.setConnectionMinimumIdleSize(redssionProperties.getConnectionMinimumIdleSize());
//             singleServerConfig.setConnectionPoolSize(redssionProperties.getConnectionPoolSize());
//             singleServerConfig.setTimeout(redssionProperties.getTimeout());
//             singleServerConfig.setPingConnectionInterval(3000);
//
//             if (StrUtil.isNotBlank(redssionProperties.getPassword())) {
//                 singleServerConfig.setPassword(redssionProperties.getPassword());
//             }
//             redissonClient = Redisson.create(config);
//             log.info("redisson的配置完成");
//         }
//         return redissonClient;
//
//     }
//
//     /**
//      * 集群装配模式
//      *
//      * @return
//      */
//     @Bean
//     @ConditionalOnProperty(name = "spring.redis.cluster.nodes")
//     RedissonClient redissonCluster() {
//
//         String[] nodes = redssionProperties.getCluster().get("nodes").split(",");
//         //redisson版本是3.5，集群的ip前面要加上“redis://”，不然会报错，3.2版本可不加
//         for (int i = 0; i < nodes.length; i++) {
//             nodes[i] = "redis://" + nodes[i];
//         }
//         Config config = new Config();
//         config.useClusterServers() //这是用的集群server
//                 .setScanInterval(2000) //设置集群状态扫描时间
//                 .setMasterConnectionPoolSize(redssionProperties.getMasterConnectionPoolSize())//设置连接数
//                 .setSlaveConnectionPoolSize(redssionProperties.getSlaveConnectionPoolSize())
//                 //同任何节点建立连接时的等待超时。时间单位是毫秒。默认：10000
//                 .setConnectTimeout(redssionProperties.getTimeout())
//                 //等待节点回复命令的时间。该时间从命令发送成功时开始计时。默认:3000
//                 .setTimeout(10000)
//                 //如果尝试达到 retryAttempts（命令失败重试次数） 仍然不能将命令发送至某个指定的节点时，将抛出错误。如果尝试在此限制之内发送成功，则开始启用 timeout（命令等待超时） 计时。默认值：3
//                 .setRetryAttempts(5)
//                 //在一条命令发送失败以后，等待重试发送的时间间隔。时间单位是毫秒。     默认值：1500
//                 .setRetryInterval(3000)
//                 .addNodeAddress(nodes).setPassword(redssionProperties.getPassword());
//
//         //可通过打印redisson.getConfig().toJSON().toString()来检测是否配置成功
//         return Redisson.create(config);
//
//     }
//
//     /**
//      * 哨兵模式自动装配
//      *
//      * @return
//      */
//     @Bean
//     @ConditionalOnProperty(name = "spring.redis.master-name")
//     RedissonClient redissonSentinel() {
//         String[] nodes = redssionProperties.getSentinelAddresses();
//         for (int i = 0; i < nodes.length; i++) {
//             nodes[i] = "redis://" + nodes[i];
//         }
//         Config config = new Config();
//         SentinelServersConfig serverConfig = config.useSentinelServers()
//                 .addSentinelAddress(nodes)
//                 .setMasterName(redssionProperties.getMasterName())
//                 .setTimeout(redssionProperties.getTimeout())
//                 .setMasterConnectionPoolSize(redssionProperties.getMasterConnectionPoolSize())
//                 .setSlaveConnectionPoolSize(redssionProperties.getSlaveConnectionPoolSize());
//         if (StrUtil.isNotBlank(redssionProperties.getPassword())) {
//             serverConfig.setPassword(redssionProperties.getPassword());
//         }
//         return Redisson.create(config);
//     }
//
// }